<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // var s=5;
        // o[s]=30;
        // o["s"]=40;
        // o.s=50;

        // o.s=50改变的是o["s"]=40，因为其中的s属于字符串。 在var s=5;时里边的s属于变量变为 o[5]=30;



        // var d;
        // o[d]=10;
        // console.log(o.d);
        // console.log(o.undefined);
        // 第一个输出结果为undefined，因为点于法的d属于字符串，与上方的并不相同，所以无定义
        // 第二的输出结果为10

        // var d={a:1};
        // o[d]=5;
        // console.log(String({a:1}),String({b:3}));
        // console.log(o[{b:3}]);

        // 答案是5，第一步需要把d转换为字符串，结果为object，而下方的{b:3}转换为字符串也是object
        // 带入后等于5


        // 对象的存储一共有两种情况，一种是存储数据，一种是存储函数
        // 存储数据的叫做对象的属性，存储函数叫做对象的方法



// console.log("a" in o);  就是判断o对象里有没有a这个key



//         var o = {
//             a: 1,
//             b: 2,
//             c: 3,
//             d: 4
//         }

//         for(var prop in o){
//             console.log(prop);
//         }
// 定义prop这个变量，遍历每个key并输出


// console.log(prop,o[prop]);
// 遍历键值对，现在prop是变量，不能用点于法
// 如果键是一个变量，不能使用.语法，必须使用[]带入变量


// var a=String.fromCharCode(122);
        // console.log(a);
//将asscii转换为字符  97-122就是小写字母a-z
    
    
// 对象中存储的内容 相互之间是没有关联的



        // var o={a:1};
        // console.log(o);
     

// 堆里面有一个对象所存的引用地址，首先在堆里面建立以对象o，然后在栈里边开辟了一个变量o，变量o存储了一个值，就是对象o在
// 堆中的引用地址，当console.log打印时，只将栈中的o打印出来，当打印o时，地址由于太多，将地址简化写成object，当点击object时，
// 就是再对中查找对象


        


        // var o={a:1};
        // console.log(o);
        // o.a=2;

// 当打开页面时，程序已经执行完毕，显示的还是对象object，点击时o对象变为了{o:2}，点击刷新时，页面就处于卸载过程，
// 重新打开页面时，有缓存机制调用，将打印时的数据存放在缓存当中，也就是{a:1}，然后再继续向下执行，点击箭头后，出现了{a:2}
// 显示时打印的对象可能已经发生变化



// {a:1,b:{c:1}}

// 此时{c:1}也存放在堆中，在b中只是存放了一个地址


        // var o={a:1};
        // var o1=o;
        // o1.a=10;
        // console.log(o.a);

// 输出结果为10  因为o和o1引用地址一样，这种方式是赋值了引用地址
// 修改任何一个，另一个看到的也是被修改后的结果



// 浅复制
        // var o={a:1,b:2};
        // var o1={};

        // for(var prop in o){
        //     o1[prop]=o[prop];
        // }

        // o.b=10;
        // console.log(o1);

// o和o1是两个对象，在将o中的每个属性赋值给o1后，对o进行修改，不会影响o1的值




        // var o={a:1,b:2,c:{d:1,e:10}};
        // var o1={};

        // for(var prop in o){
        //     o1[prop]=o[prop];
        // }

        // o.a=10;
        // o.c.d=10;
        // console.log(o1);

// 当对象里面包含对象时，在复制时将引用地址也赋值了过去，所以对c中 d和e的改变，就是对引用地址进行改变

      



    </script>
</body>
</html>